package com.lemon.file.service;

import com.lemon.file.domain.BiFileInfo;
import com.lemon.file.domain.vo.FolderVo;
import com.lemon.system.api.domain.SysFile;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 文件上传接口
 * 
 * @author huangpeng
 */
public interface ISysFileService
{

    /**
     * 文件上传
     * @Title: uploadFile
     * @Description: 文件上传
     * @param path 目标文件夹，如果为空则使用系统默认文件夹
     * @param file 上传的文件
     * @param fileName 自定义文件名
     * @return: 访问地址
     * @throws:
     * @author: huangpeng
     * @Date: 2022/6/4 22:55
     */
    public SysFile uploadFile(String path , MultipartFile file, String fileName) throws Exception;

    /**
     * @Title: download
     * @Description: 文件下载
     * @param fileName 存储的文件名
     * @param originFileName 下载后的文件名
     * @param response
     * @return: void
     * @throws:
     * @author: huangpeng
     * @Date: 2022/6/5 21:07
     */
    public void download(String fileName, String originFileName, HttpServletResponse response) throws Exception;

    /**
     * @Title: listAll
     * @Description: 获取所有文件
     * @param
     * @return: FolderVo
     * @throws:
     * @author: huangpeng
     * @Date: 2022/6/5 22:24
     */
    FolderVo listAll();

    /**
     * 文件批量删除
     * @Title: deleteByBatch
     * @Description: 文件批量删除
     * @param filenameList 带路径的不要文件后缀的文件名列表
     * @return: String
     * @throws:
     * @author: huangpeng
     * @Date: 2022/6/5 22:32
     */
    boolean deleteSourceFileByBatch(List<String> filenameList) throws Exception;

    /**
     * 查询文件管理列表
     * @Title: selectBiFileInfoList
     * @Description: 查询文件管理列表
     * @param biFileInfo
     * @return: List<BiFileInfo>
     * @throws:
     * @author: huangpeng
     * @Date: 2022/12/24 20:44
     */
    List<BiFileInfo> selectBiFileInfoList(BiFileInfo biFileInfo);

    /**
     * 根据文件id列表删除文件
     * @Title: deleteBiFileInfoByIds
     * @Description: 根据文件id列表删除文件
     * @param ids
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2022/12/25 12:11
     */
    int deleteBiFileInfoByIds(Long[] ids) throws Exception;

    /**
     * 根据文件id列表查询
     * @Title: selectFileInfoByIds
     * @Description: 根据文件id列表查询
     * @param ids
     * @return: List<BiFileInfo>
     * @throws:
     * @author: huangpeng
     * @Date: 2022/12/25 15:54
     */
    List<BiFileInfo> selectFileInfoByIds(Long[] ids);

    /**
     * 前端文件上传
     * @Title: uploadFileWeb
     * @Description: 前端文件上传
     * @param path 目标文件夹，如果为空则使用系统默认文件夹
     * @param file 上传的文件
     * @param fileName 自定义文件名
     * @return: String
     * @throws:
     * @author: huangpeng
     * @Date: 2023/7/2 17:30
     */
    public SysFile uploadFileWeb(String path ,MultipartFile file, String fileName) throws Exception;

    /**
     * 前端查询文件列表
     * @Title: listWed
     * @Description: 前端查询文件列表
     * @param biFileInfo
     * @return: List<BiFileInfo>
     * @throws:
     * @author: huangpeng
     * @Date: 2023/9/13 19:14
     */
    List<BiFileInfo> listWed(BiFileInfo biFileInfo);
}
